//
//  TTNetworkingTools.swift
//  TTWeibo
//
//  Created by 陶宏路 on 16/7/22.
//  Copyright © 2016年 陶路路. All rights reserved.
//

import UIKit
import AFNetworking

enum TTNetworkingToolsType : String{
    
    case GET = "GET"
    case POST = "POST"
}
class TTNetworkingTools: AFHTTPSessionManager {

//    创建单例
    static var sharedNetworkManager:TTNetworkingTools = {
        let network = TTNetworkingTools()
        network.responseSerializer.acceptableContentTypes?.insert("text/plain")
//        network.requestSerializer.setValue:"application/json" forHTTPHeaderField:"Content-Type"
//        network.requestSerializer.setValue("application/json", forHTTPHeaderField: "Content-Type")
        return network
    }()
    
    func getDataWithRequest(type:TTNetworkingToolsType,urlString:String,parameter: AnyObject?,success:(responseObject:AnyObject?)->(),failure: (error:NSError) ->()){
        
        if type == .GET {
        
            GET(urlString, parameters: parameter, progress: nil, success: { (_, object) -> Void in
                
                success(responseObject: object)
                
                }, failure: { (_, err) -> Void in
                    
                   failure(error: err)
                    
            })
          
        
        }else{
            
            POST(urlString, parameters: parameter, progress: nil, success: { (_, object) -> Void in
                
                 success(responseObject: object)
                
                }, failure: { (_, err) -> Void in
                    
                   failure(error: err)
            })
        }

}

}


extension TTNetworkingTools{
    
    func loadDataUserAccount(code:String,success:(responseObject:AnyObject?)->(),failure: (error:NSError) ->()){
        
        let  urlString:String = "https://api.weibo.com/oauth2/access_token"
        let parameters = ["client_id":AppKey,"client_secret":AppSecret,"grant_type":"authorization_code","code":code,"redirect_uri":APPREDIRECT_URI]
        
        getDataWithRequest(.POST, urlString: urlString, parameter: parameters, success: success, failure: failure)
        
    }
    
    func loadDataUserInfo(access_token:TTNetwokingModel,success:(responseObject:AnyObject?)->(),failure: (error:NSError) ->()){
        
        let urlString = "https://api.weibo.com/2/users/show.json"
        
        let parameters = [
            "access_token": access_token.access_token!,
            "uid": access_token.uid!
        ]

        getDataWithRequest(.GET, urlString: urlString, parameter: parameters, success: success, failure: failure)
    }
}


//mark home界面网络请求

/*

let homeUrlString:String = "https://api.weibo.com/2/statuses/home_timeline.json"

/*
必选	类型及范围	说明
access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
since_id	false	int64	若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
max_id	false	int64	若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
count	false	int	单页返回的记录条数，最大不超过100，默认为20。
page	false	int	返回结果的页码，默认为1。
base_app	false	int	是否只获取当前应用的数据。0为否（所有数据），1为是（仅当前应用），默认为0。
feature	false	int	过滤类型ID，0：全部、1：原创、2：图片、3：视频、4：音乐，默认为0。
trim_user	false	int	返回值中user字段开关，0：返回完整user字段、1：user字段仅返回user_id，默认为0。
*/

*/
extension TTNetworkingTools{
    
    func loadHomeData(maxId:Int64,sinceId:Int64,success:(responseObject:AnyObject?)->(),failure: (error:NSError) ->()){
        
        let homeUrlString:String = "https://api.weibo.com/2/statuses/home_timeline.json"
        
        let parameters = ["access_token":TTOAutoModel.sharedOautoModel.userModel!.access_token!,"max_id":"\(maxId)","since_id":"\(sinceId)"]
        
        getDataWithRequest(.GET, urlString: homeUrlString, parameter: parameters, success: success, failure: failure)
    }
    
}


extension TTNetworkingTools{
    
    //https://upload.api.weibo.com/2/statuses/upload.json
    //支持格式
    //JSON
    //HTTP请求方式
    //POST
    //是否需要登录
    //是
    //关于登录授权，参见 如何登录授权
    //访问授权限制
    //访问级别：普通接口
    //频次限制：是
    //关于频次限制，参见 接口访问权限说明
    //请求参数
    //必选	类型及范围	说明
    //source	false	string	采用OAuth授权方式不需要此参数，其他授权方式为必填参数，数值为应用的AppKey。
    //access_token	false	string	采用OAuth授权方式为必填参数，其他授权方式不需要此参数，OAuth授权后获得。
    //status	true	string	要发布的微博文本内容，必须做URLencode，内容不超过140个汉字。
    //visible	false	int	微博的可见性，0：所有人能看，1：仅自己可见，2：密友可见，3：指定分组可见，默认为0。
    //list_id	false	string	微博的保护投递指定分组ID，只有当visible参数为3时生效且必选。
    //pic	true	binary	要上传的图片，仅支持JPEG、GIF、PNG格式，图片大小小于5M。
    //lat	false	float	纬度，有效范围：-90.0到+90.0，+表示北纬，默认为0.0。
    //long	false	float	经度，有效范围：-180.0到+180.0，+表示东经，默认为0.0。
    //annotations	false	string	元数据，主要是为了方便第三方应用记录一些适合于自己使用的信息，每条微博可以包含一个或者多个元数据，必须以json字串的形式提交，字串长度不超过512个字符，具体内容可以自定。
    //rip	false	string	开发者上报的操作用户真实IP，形如：211.156.0.1。
    // NSData *data = UIImageJPEGRepresentation(uiImage, 0.7);
    
    func composeData(status:String,success:(responseObject:AnyObject?)->(),failure: (error:NSError) ->()){
        
        let urlString = "https://upload.api.weibo.com/2/statuses/update.json"
        
        
        let parameters = ["access_token":TTOAutoModel.sharedOautoModel.userModel!.access_token!,"status":status]
        print(TTOAutoModel.sharedOautoModel.userModel!.access_token)
         getDataWithRequest(.POST, urlString: urlString, parameter: parameters, success: success, failure: failure)
    }
    
    func uploadDate(status:String,imageArray:[UIImage],success:(responseObject:AnyObject?)->(),failure: (error:NSError) ->()){
        
        let urlString = "https://upload.api.weibo.com/2/statuses/upload.json"
        
         let parameters = ["access_token":TTOAutoModel.sharedOautoModel.userModel!.access_token!,"status":status]
        
        POST(urlString, parameters: parameters, constructingBodyWithBlock: { (formate) -> Void in
            
            for i in 0..<imageArray.count{
                
                let imageDate = UIImagePNGRepresentation(imageArray[i])!
                
                formate.appendPartWithFileData(imageDate, name: "pic", fileName: "oooo", mimeType: "application/octet-stream")
            }
            
            }, progress: { (_) -> Void in
                
            }, success: { (_, respose) -> Void in
                
                success(responseObject: respose)
                
            }) { (_, error) -> Void in
                
                failure(error: error)
        }
    }

}




